package com.toKnow.mapper;

import com.toKnow.model.dto.AuthorInfoDTO;
import com.toKnow.model.dto.UserInfoDTO;
import com.toKnow.model.entity.UserInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 与user_info有关的数据库操作
 */
public interface UserInfoMapper {
    /**
     * 增删改
     */
    int insertUser(UserInfo userInfo);
    int updateUser(UserInfo userInfo);

    /**
     * 查
     */
    /*注册相关*/
    // 查询username, email。已激活的最优先，其次按id排序取第一个。
    List<UserInfo> selectUsersBySingleAttr(@Param("fieldName") String name, @Param("fieldValue") Object value);
    // 通过用户名和邮箱激活账号，激活前已确保用户名和邮箱不存在已激活的用户中，而且注册时已通过逻辑确保用户名唯一，所以返回单值
    UserInfo selectUserByUsernameAndEmail(@Param("username") String username, @Param("email") String email);
    /*登录相关*/
    // 登陆时，如果输入邮箱，则获取用户名，此时检查is_active，确保返回值唯一，因为激活账户的邮箱唯一
    String selectActiveUsernameByEmail(String email);
    // 通过用户名和密码验证登录，检查is_active，确保返回值唯一，因为激活账户的用户名唯一
    UserInfo selectActiveUserByUsernameAndUserpwd(@Param("username") String username, @Param("userpwd") String userpwd);
    /*用户信息相关*/
    // 获得已激活用户的独一无二的信息（id，username，email），检查is_active，确保返回值唯一
    UserInfo selectActiveUserByUniqueAttr(@Param("fieldName") String name, @Param("fieldValue") Object value);
    List<String> selectSearchHistory(Integer userId);
    Integer updateCollectTimes(Integer userId,Integer add);
    Integer updateReadTimes(Integer userId,Integer add);
    Integer updateDownloadTimes(Integer userId,Integer add);
    Integer updateLikeTimes(Integer userId,Integer add);
    Boolean checkFollow(Integer userId, Integer authorId);
    Boolean follow(Integer userId, Integer authorId);
    Boolean unfollow(Integer userId, Integer authorId);
    Boolean updateFollowNum(Integer userId, Integer num);
    Boolean updateFollowedNum(Integer userId, Integer num);
    List<Integer> getFollowing(Integer userId, Integer page);
    UserInfo getAuthorInfo(Integer authorId);
}
